// 给你一个链表的头节点 head ，判断链表中是否有环。

// 如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。注意：pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

// 如果链表中存在环 ，则返回 true 。 否则，返回 false 。



// 解题思路 快慢指针
// 两个人在圆形操场上的起点同时起跑，速度快的人一定会超过速度慢的人一圈。

// 用一块一慢两个指针遍历链表，如果指针能够相逢，那么链表就有圈。

// 用一块一慢两个指针遍历链表，如果指针能够相逢，就返回true

// 遍历结束后，还没有相逢就返回false



function hasCycle(head: ListNode | null): boolean {
    let slow = head   // 乌龟和兔子同时从起点出发
    let fast = head
    while(fast && fast.next){//如果无环的话while会终止
        slow = slow.next // # 乌龟走一步
        fast = fast.next.next // # 兔子走两步
        if(slow == fast){ // # 兔子追上乌龟（套圈），说明有环
            return true
        }
    }
    return false  //# 访问到了链表末尾，无环
};